/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * 云主机
 * 云主机实例、镜像、实例规格、实例模板、配额相关的接口
 *
 * OpenAPI spec version: v1
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using JDCloudSDK.Core.Auth;
using JDCloudSDK.Core.Client;
using JDCloudSDK.Core.Http;
using JDCloudSDK.Vm.Apis;
using JDCloudSDK.Vm.Model;
using System;
using System.Collections.Generic;
using System.Text;
#if NET40||NET35
#else
using System.Threading.Tasks;
#endif

namespace JDCloudSDK.Vm.Client
{
    /// <summary>
    ///  云主机
    ///  云主机实例、镜像、实例规格、实例模板、配额相关的接口
    ///  Vm Api 客户端
    ///</summary>
    public class VmClient : JdcloudClient
    {

        /// <summary>
        ///  默认私有构造函数
        /// </summary>
        private VmClient()
        {

        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="environment">sdk 环境配置信息</param>
        public VmClient(CredentialsProvider credentialsProvider, HttpRequestConfig httpRequestConfig,SDKEnvironment environment)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
            this.environment = environment;
        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="credentialsProvider">认证信息</param>
        public VmClient(CredentialsProvider credentialsProvider,HttpRequestConfig httpRequestConfig)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        /// 默认构造函数，
        /// 注意如果使用此方法 httpRequestConfig 使用的http 请求 schema 为Https
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        public VmClient(CredentialsProvider credentialsProvider)
        {
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        ///  版本号 1.2.8
        ///</summary>
        public const string ClientVersion = "1.2.8";

        private const string apiVersion = "v1";
        private const string userAgentPrefix = "JdcloudSdkDotNet";
        private const string defaultEndpoint = "vm.jdcloud-api.com";
        private const string serviceName = "vm";
        private const string userAgent = userAgentPrefix + "/" + ClientVersion + " " + serviceName + "/" + apiVersion;


        private SDKEnvironment environment = new SDKEnvironment(defaultEndpoint);
        private CredentialsProvider credentialsProvider;
        private HttpRequestConfig httpRequestConfig;

        /// <summary>
        ///  获取证书信息
        ///</summary>
        public override CredentialsProvider CredentialsProvider   { get { return credentialsProvider; } }

        /// <summary>
        ///  获取http 客户端配置信息
        ///</summary>
        public override HttpRequestConfig HttpRequestConfig { get { return httpRequestConfig; } }

        /// <summary>
        ///  获取sdk环境配置信息
        ///</summary>
        public override SDKEnvironment SDKEnvironment { get { return environment; } }

        /// <summary>
        ///  获取用户自定义浏览器识别字符串
        ///</summary>
        public override string UserAgent { get { return userAgent; } }

        /// <summary>
        ///  获取服务名称
        ///</summary>
        public override string ServiceName { get { return serviceName; } }

        /// <summary>
        ///  获取版本号
        ///</summary>
        public override string Version { get { return apiVersion; } }



#if NET40||NET35
        /// <summary>
        ///  
        /// 查询私有镜像共享给哪些京东云帐户。
        /// 
        /// 详细操作说明请参考帮助文档：[共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/share-image)
        /// 
        /// ## 接口说明
        /// - 只允许查询用户的私有镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeImageMembersResponse DescribeImageMembers(DescribeImageMembersRequest request) {
            return  new DescribeImageMembersExecutor().Client(this).Execute<DescribeImageMembersResponse, DescribeImageMembersResult, DescribeImageMembersRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询私有镜像共享给哪些京东云帐户。
        /// 
        /// 详细操作说明请参考帮助文档：[共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/share-image)
        /// 
        /// ## 接口说明
        /// - 只允许查询用户的私有镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeImageMembersResponse> DescribeImageMembers(DescribeImageMembersRequest request) {
            return await new DescribeImageMembersExecutor().Client(this).Execute<DescribeImageMembersResponse, DescribeImageMembersResult, DescribeImageMembersRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 批量查询云主机用户自定义元数据。
        /// 
        /// 详细操作说明请参考帮助文档：[自定义元数据](https://docs.jdcloud.com/cn/virtual-machines/userdata)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询10台云主机实例自定义元数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstancesCustomDataResponse DescribeInstancesCustomData(DescribeInstancesCustomDataRequest request) {
            return  new DescribeInstancesCustomDataExecutor().Client(this).Execute<DescribeInstancesCustomDataResponse, DescribeInstancesCustomDataResult, DescribeInstancesCustomDataRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 批量查询云主机用户自定义元数据。
        /// 
        /// 详细操作说明请参考帮助文档：[自定义元数据](https://docs.jdcloud.com/cn/virtual-machines/userdata)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询10台云主机实例自定义元数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstancesCustomDataResponse> DescribeInstancesCustomData(DescribeInstancesCustomDataRequest request) {
            return await new DescribeInstancesCustomDataExecutor().Client(this).Execute<DescribeInstancesCustomDataResponse, DescribeInstancesCustomDataResult, DescribeInstancesCustomDataRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 创建一台或多台指定配置的云主机实例。
        /// 
        /// 实例有三种创建方式，不同方式下传参详见下方的请求[参数说明](createInstance#requestparameters)，也可参考请求[示例](createInstance#examples)。
        /// 
        /// 1、自定义创建：按配置要求逐一指定参数创建；
        /// 2、使用实例模板创建：[实例模板](https://docs.jdcloud.com/virtual-machines/instance-template-overview)是实例配置信息的预配置，通过实例模板可快速创建实例，省去逐一配置参数的步骤。指定实例模板创建时，如不额外指定模板包含的参数将以模板为准创建实例，模板中未包含的参数，如可用区、内网IPv4地址、名称等仍需指定；
        /// 3、基于高可用组创建：[高可用组](https://docs.jdcloud.com/availability-group/product-overview)是一种高可用部署解决方案，提供了组内实例在数据中心内横跨多个故障域均衡部署的机制。高可用组须搭配实例模板使用，基于高可用组创建的实例将在其指定的可用区内以实例模板配置按一定分散机制创建实例。此创建方式下，实例创建参数除内网IPv4地址、名称等外均以实例模板为准且不支持再次指定。
        /// 
        /// 详细操作说明请参考帮助文档：[创建实例](https://docs.jdcloud.com/cn/virtual-machines/create-instance)
        /// 
        /// ## 接口说明
        /// - 创建实例前，请参考 [创建前准备](https://docs.jdcloud.com/virtual-machines/account-preparation-linux) 完成实名认证、支付方式确认、计费类型选择等准备工作。
        /// - 创建实例的配置说明和选择指导，请参考 [配置项说明](https://docs.jdcloud.com/cn/virtual-machines/select-configuration-linux)。
        /// - 各地域下实例及关联资源（云硬盘、弹性公网IP）的可创建数量受配额限制，创建前请通过 [DescribeQuotas](https://docs.jdcloud.com/cn/virtual-machines/api/describequotas?content&#x3D;API) 确认配额，如须提升请[提交工单](https://ticket.jdcloud.com/applyorder/submit)或联系京东云客服。
        /// - 不同地域及可用区下售卖的实例规格有差异，可通过 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes?content&#x3D;API) 查询在售规格及规格详细信息。
        /// - 通过本接口创建包年包月实例时将自动从账户扣款（代金券优先），如需使用第三方支付方式请通过控制台创建。
        /// - 单次请求最多支持创建 &#x60;100&#x60; 台实例。
        /// - 本接口为异步接口，请求下发成功后会返回RequestId和实例ID，此时实例处于 &#x60;Pending&#x60;（创建中）状态。如创建成功则实例自动变为 &#x60;Running&#x60;（运行中）状态；如创建失败则短暂处于 &#x60;Error&#x60;（错误）状态，随后将自动删除（创建失败的实例不会收费且会自动释放占用的配额）。实例状态可以通过 [describeInstanceStatus](https://docs.jdcloud.com/virtual-machines/api/describeinstancestatus?content&#x3D;API) 接口查询。
        /// - 批量创建多台实例时系统将尽可能完成目标创建数量，但受底层资源、配额等因素影响，可能存在部分成功部分失败的情况，还请关注最终完成数量，如有失败情况请尝试重新申请或联系客服。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateInstancesResponse CreateInstances(CreateInstancesRequest request) {
            return  new CreateInstancesExecutor().Client(this).Execute<CreateInstancesResponse, CreateInstancesResult, CreateInstancesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 创建一台或多台指定配置的云主机实例。
        /// 
        /// 实例有三种创建方式，不同方式下传参详见下方的请求[参数说明](createInstance#requestparameters)，也可参考请求[示例](createInstance#examples)。
        /// 
        /// 1、自定义创建：按配置要求逐一指定参数创建；
        /// 2、使用实例模板创建：[实例模板](https://docs.jdcloud.com/virtual-machines/instance-template-overview)是实例配置信息的预配置，通过实例模板可快速创建实例，省去逐一配置参数的步骤。指定实例模板创建时，如不额外指定模板包含的参数将以模板为准创建实例，模板中未包含的参数，如可用区、内网IPv4地址、名称等仍需指定；
        /// 3、基于高可用组创建：[高可用组](https://docs.jdcloud.com/availability-group/product-overview)是一种高可用部署解决方案，提供了组内实例在数据中心内横跨多个故障域均衡部署的机制。高可用组须搭配实例模板使用，基于高可用组创建的实例将在其指定的可用区内以实例模板配置按一定分散机制创建实例。此创建方式下，实例创建参数除内网IPv4地址、名称等外均以实例模板为准且不支持再次指定。
        /// 
        /// 详细操作说明请参考帮助文档：[创建实例](https://docs.jdcloud.com/cn/virtual-machines/create-instance)
        /// 
        /// ## 接口说明
        /// - 创建实例前，请参考 [创建前准备](https://docs.jdcloud.com/virtual-machines/account-preparation-linux) 完成实名认证、支付方式确认、计费类型选择等准备工作。
        /// - 创建实例的配置说明和选择指导，请参考 [配置项说明](https://docs.jdcloud.com/cn/virtual-machines/select-configuration-linux)。
        /// - 各地域下实例及关联资源（云硬盘、弹性公网IP）的可创建数量受配额限制，创建前请通过 [DescribeQuotas](https://docs.jdcloud.com/cn/virtual-machines/api/describequotas?content&#x3D;API) 确认配额，如须提升请[提交工单](https://ticket.jdcloud.com/applyorder/submit)或联系京东云客服。
        /// - 不同地域及可用区下售卖的实例规格有差异，可通过 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes?content&#x3D;API) 查询在售规格及规格详细信息。
        /// - 通过本接口创建包年包月实例时将自动从账户扣款（代金券优先），如需使用第三方支付方式请通过控制台创建。
        /// - 单次请求最多支持创建 &#x60;100&#x60; 台实例。
        /// - 本接口为异步接口，请求下发成功后会返回RequestId和实例ID，此时实例处于 &#x60;Pending&#x60;（创建中）状态。如创建成功则实例自动变为 &#x60;Running&#x60;（运行中）状态；如创建失败则短暂处于 &#x60;Error&#x60;（错误）状态，随后将自动删除（创建失败的实例不会收费且会自动释放占用的配额）。实例状态可以通过 [describeInstanceStatus](https://docs.jdcloud.com/virtual-machines/api/describeinstancestatus?content&#x3D;API) 接口查询。
        /// - 批量创建多台实例时系统将尽可能完成目标创建数量，但受底层资源、配额等因素影响，可能存在部分成功部分失败的情况，还请关注最终完成数量，如有失败情况请尝试重新申请或联系客服。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateInstancesResponse> CreateInstances(CreateInstancesRequest request) {
            return await new CreateInstancesExecutor().Client(this).Execute<CreateInstancesResponse, CreateInstancesResult, CreateInstancesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 共享私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/share-image)
        /// 
        /// ## 接口说明
        /// - 只允许共享用户的私有镜像。
        /// - 单个镜像最多可以共享给20个京东云帐户、不可以共享给自己。
        /// - 带有加密快照的打包镜像无法共享。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ShareImageResponse ShareImage(ShareImageRequest request) {
            return  new ShareImageExecutor().Client(this).Execute<ShareImageResponse, ShareImageResult, ShareImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 共享私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/share-image)
        /// 
        /// ## 接口说明
        /// - 只允许共享用户的私有镜像。
        /// - 单个镜像最多可以共享给20个京东云帐户、不可以共享给自己。
        /// - 带有加密快照的打包镜像无法共享。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ShareImageResponse> ShareImage(ShareImageRequest request) {
            return await new ShareImageExecutor().Client(this).Execute<ShareImageResponse, ShareImageResult, ShareImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 存量主机加入高可用组。
        /// 
        /// 存量主机加入高可用组，或者主机从一个高可用组移动到另一个高可用组
        /// 
        /// ## 接口说明
        /// - 不支持专属宿主机上的实例调整高可用组。
        /// - 除GPU、vGPU（以P开头）外的一代机暂不支持调整高可用组。
        /// - 与该高可用组关联实例模板的VPC不同的不支持调整高可用组。
        /// - 与该高可用组可用区不匹配的实例不支持调整高可用组。
        /// - 本地系统盘机型不支持强制均衡。
        /// - 仅支持实例状态为已停止的实例强制均衡调整高可用组。
        /// - 若不强制均衡，仅支持实例状态为运行中或已停止的实例调整高可用组。
        /// - 若强制均衡，带本地数据盘的实例需确认清除本地盘数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstancePlacementResponse ModifyInstancePlacement(ModifyInstancePlacementRequest request) {
            return  new ModifyInstancePlacementExecutor().Client(this).Execute<ModifyInstancePlacementResponse, ModifyInstancePlacementResult, ModifyInstancePlacementRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 存量主机加入高可用组。
        /// 
        /// 存量主机加入高可用组，或者主机从一个高可用组移动到另一个高可用组
        /// 
        /// ## 接口说明
        /// - 不支持专属宿主机上的实例调整高可用组。
        /// - 除GPU、vGPU（以P开头）外的一代机暂不支持调整高可用组。
        /// - 与该高可用组关联实例模板的VPC不同的不支持调整高可用组。
        /// - 与该高可用组可用区不匹配的实例不支持调整高可用组。
        /// - 本地系统盘机型不支持强制均衡。
        /// - 仅支持实例状态为已停止的实例强制均衡调整高可用组。
        /// - 若不强制均衡，仅支持实例状态为运行中或已停止的实例调整高可用组。
        /// - 若强制均衡，带本地数据盘的实例需确认清除本地盘数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstancePlacementResponse> ModifyInstancePlacement(ModifyInstancePlacementRequest request) {
            return await new ModifyInstancePlacementExecutor().Client(this).Execute<ModifyInstancePlacementResponse, ModifyInstancePlacementResult, ModifyInstancePlacementRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询实例模板上的自定义元数据。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 一般情况下由于自定义元数据比较大，所以限制每次最多查询10个实例模板。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceTemplatesCustomdataResponse DescribeInstanceTemplatesCustomdata(DescribeInstanceTemplatesCustomdataRequest request) {
            return  new DescribeInstanceTemplatesCustomdataExecutor().Client(this).Execute<DescribeInstanceTemplatesCustomdataResponse, DescribeInstanceTemplatesCustomdataResult, DescribeInstanceTemplatesCustomdataRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询实例模板上的自定义元数据。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 一般情况下由于自定义元数据比较大，所以限制每次最多查询10个实例模板。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceTemplatesCustomdataResponse> DescribeInstanceTemplatesCustomdata(DescribeInstanceTemplatesCustomdataRequest request) {
            return await new DescribeInstanceTemplatesCustomdataExecutor().Client(this).Execute<DescribeInstanceTemplatesCustomdataResponse, DescribeInstanceTemplatesCustomdataResult, DescribeInstanceTemplatesCustomdataRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机实例绑定密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定密钥](https://docs.jdcloud.com/cn/virtual-machines/bind-keypair)
        /// 
        /// ## 接口说明
        /// - 只支持为 linux 云主机实例绑定密钥。
        /// - 每台云主机实例只支持绑定一个密钥。如果云主机绑定的密钥被删除了，那么该云主机还可以再次绑定密钥。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AttachKeypairResponse AttachKeypair(AttachKeypairRequest request) {
            return  new AttachKeypairExecutor().Client(this).Execute<AttachKeypairResponse, AttachKeypairResult, AttachKeypairRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机实例绑定密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定密钥](https://docs.jdcloud.com/cn/virtual-machines/bind-keypair)
        /// 
        /// ## 接口说明
        /// - 只支持为 linux 云主机实例绑定密钥。
        /// - 每台云主机实例只支持绑定一个密钥。如果云主机绑定的密钥被删除了，那么该云主机还可以再次绑定密钥。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AttachKeypairResponse> AttachKeypair(AttachKeypairRequest request) {
            return await new AttachKeypairExecutor().Client(this).Execute<AttachKeypairResponse, AttachKeypairResult, AttachKeypairRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 导出私有镜像。
        /// 
        /// 将京东云私有镜像导出至京东云以外环境。
        /// 
        /// 详细操作说明请参考帮助文档：[导出私有镜像](https://docs.jdcloud.com/cn/virtual-machines/export-private-image)
        /// 
        /// ## 接口说明
        /// - 调用此接口将私有镜像导出到京东云对象存储空间中。
        /// - 仅支持系统盘镜像导出，即使镜像有关联的数据盘快照，也仅会导出系统盘镜像文件。
        /// - 导出的镜像文件格式为QCOW2。
        /// - &#x60;Windows Server&#x60; 操作系统的镜像不支持导出（若镜像来源为导入镜像，则无此限制）。
        /// - 镜像必须为 &#x60;云硬盘系统盘&#x60; 镜像，如您的镜像是 &#x60;本地盘系统盘&#x60; 镜像，可以通过镜像类型转换功能转换为云盘系统盘镜像后再导出。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ExportImageResponse ExportImage(ExportImageRequest request) {
            return  new ExportImageExecutor().Client(this).Execute<ExportImageResponse, ExportImageResult, ExportImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 导出私有镜像。
        /// 
        /// 将京东云私有镜像导出至京东云以外环境。
        /// 
        /// 详细操作说明请参考帮助文档：[导出私有镜像](https://docs.jdcloud.com/cn/virtual-machines/export-private-image)
        /// 
        /// ## 接口说明
        /// - 调用此接口将私有镜像导出到京东云对象存储空间中。
        /// - 仅支持系统盘镜像导出，即使镜像有关联的数据盘快照，也仅会导出系统盘镜像文件。
        /// - 导出的镜像文件格式为QCOW2。
        /// - &#x60;Windows Server&#x60; 操作系统的镜像不支持导出（若镜像来源为导入镜像，则无此限制）。
        /// - 镜像必须为 &#x60;云硬盘系统盘&#x60; 镜像，如您的镜像是 &#x60;本地盘系统盘&#x60; 镜像，可以通过镜像类型转换功能转换为云盘系统盘镜像后再导出。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ExportImageResponse> ExportImage(ExportImageRequest request) {
            return await new ExportImageExecutor().Client(this).Execute<ExportImageResponse, ExportImageResult, ExportImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 启动云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[启动实例](https://docs.jdcloud.com/cn/virtual-machines/start-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为停止 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以启动。
        /// - 如果实例为停机不计费模式，启动时有可能因为库存资源不足而导致无法启动。
        /// - 如果云主机实例已欠费或已到期，则无法启动。
        /// - 如果实例系统盘是云硬盘，启动之前请确保系统盘处于正常挂载状态。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public StartInstanceResponse StartInstance(StartInstanceRequest request) {
            return  new StartInstanceExecutor().Client(this).Execute<StartInstanceResponse, StartInstanceResult, StartInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 启动云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[启动实例](https://docs.jdcloud.com/cn/virtual-machines/start-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为停止 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以启动。
        /// - 如果实例为停机不计费模式，启动时有可能因为库存资源不足而导致无法启动。
        /// - 如果云主机实例已欠费或已到期，则无法启动。
        /// - 如果实例系统盘是云硬盘，启动之前请确保系统盘处于正常挂载状态。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<StartInstanceResponse> StartInstance(StartInstanceRequest request) {
            return await new StartInstanceExecutor().Client(this).Execute<StartInstanceResponse, StartInstanceResult, StartInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 撤销社区镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只允许撤销用户的私有镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UnReleaseImageResponse UnReleaseImage(UnReleaseImageRequest request) {
            return  new UnReleaseImageExecutor().Client(this).Execute<UnReleaseImageResponse, UnReleaseImageResult, UnReleaseImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 撤销社区镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只允许撤销用户的私有镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UnReleaseImageResponse> UnReleaseImage(UnReleaseImageRequest request) {
            return await new UnReleaseImageExecutor().Client(this).Execute<UnReleaseImageResponse, UnReleaseImageResult, UnReleaseImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 取消共享私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[取消共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/cancel-share-image)
        /// 
        /// ## 接口说明
        /// - 只允许操作用户的私有镜像。
        /// - 原被共享用户将无法再使用该镜像创建云主机实例，同时使用该镜像创建的云主机实例也无法重置为原始系统状态。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UnShareImageResponse UnShareImage(UnShareImageRequest request) {
            return  new UnShareImageExecutor().Client(this).Execute<UnShareImageResponse, UnShareImageResult, UnShareImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 取消共享私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[取消共享私有镜像](https://docs.jdcloud.com/cn/virtual-machines/cancel-share-image)
        /// 
        /// ## 接口说明
        /// - 只允许操作用户的私有镜像。
        /// - 原被共享用户将无法再使用该镜像创建云主机实例，同时使用该镜像创建的云主机实例也无法重置为原始系统状态。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UnShareImageResponse> UnShareImage(UnShareImageRequest request) {
            return await new UnShareImageExecutor().Client(this).Execute<UnShareImageResponse, UnShareImageResult, UnShareImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 批量查询镜像的实例规格限制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 通过此接口可以查询镜像的实例规格限制信息。
        /// - 只有官方镜像、第三方镜像有实例规格的限制，用户的私有镜像没有此限制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeImageConstraintsBatchResponse DescribeImageConstraintsBatch(DescribeImageConstraintsBatchRequest request) {
            return  new DescribeImageConstraintsBatchExecutor().Client(this).Execute<DescribeImageConstraintsBatchResponse, DescribeImageConstraintsBatchResult, DescribeImageConstraintsBatchRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 批量查询镜像的实例规格限制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 通过此接口可以查询镜像的实例规格限制信息。
        /// - 只有官方镜像、第三方镜像有实例规格的限制，用户的私有镜像没有此限制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeImageConstraintsBatchResponse> DescribeImageConstraintsBatch(DescribeImageConstraintsBatchRequest request) {
            return await new DescribeImageConstraintsBatchExecutor().Client(this).Execute<DescribeImageConstraintsBatchResponse, DescribeImageConstraintsBatchResult, DescribeImageConstraintsBatchRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改实例模板属性。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 名称、描述、实例模板配置信息至少要传一项。
        /// - 参数时，对应的参数不做更改。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateInstanceTemplateResponse UpdateInstanceTemplate(UpdateInstanceTemplateRequest request) {
            return  new UpdateInstanceTemplateExecutor().Client(this).Execute<UpdateInstanceTemplateResponse, UpdateInstanceTemplateResult, UpdateInstanceTemplateRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改实例模板属性。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 名称、描述、实例模板配置信息至少要传一项。
        /// - 参数时，对应的参数不做更改。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateInstanceTemplateResponse> UpdateInstanceTemplate(UpdateInstanceTemplateRequest request) {
            return await new UpdateInstanceTemplateExecutor().Client(this).Execute<UpdateInstanceTemplateResponse, UpdateInstanceTemplateResult, UpdateInstanceTemplateRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为一台云主机挂载云硬盘。
        /// 
        /// 详细操作说明请参考帮助文档：[挂载云硬盘](https://docs.jdcloud.com/cn/virtual-machines/attach-cloud-disk)
        /// 
        /// ## 接口说明
        /// - 云主机和云硬盘都没有正在进行中的的任务时才可以操作。
        /// - 云主机状态必须是 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态。操作系统盘时必须先停止实例。
        /// - 实例挂载云硬盘的数量，不能超过实例规格的限制。可查询  [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes)  接口获得指定规格可挂载云硬盘的数量上限。
        /// - 云硬盘作为系统盘时，容量不能小于40GB，并且不能超过500GB。
        /// - 待挂载的云硬盘与云主机实例必须在同一个可用区下。
        /// - 共享型云硬盘最多可挂载16个云主机实例，并且只能用作数据盘，不能用于系统盘。非共享型云盘最多只能挂载一个云主机实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AttachDiskResponse AttachDisk(AttachDiskRequest request) {
            return  new AttachDiskExecutor().Client(this).Execute<AttachDiskResponse, AttachDiskResult, AttachDiskRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为一台云主机挂载云硬盘。
        /// 
        /// 详细操作说明请参考帮助文档：[挂载云硬盘](https://docs.jdcloud.com/cn/virtual-machines/attach-cloud-disk)
        /// 
        /// ## 接口说明
        /// - 云主机和云硬盘都没有正在进行中的的任务时才可以操作。
        /// - 云主机状态必须是 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态。操作系统盘时必须先停止实例。
        /// - 实例挂载云硬盘的数量，不能超过实例规格的限制。可查询  [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes)  接口获得指定规格可挂载云硬盘的数量上限。
        /// - 云硬盘作为系统盘时，容量不能小于40GB，并且不能超过500GB。
        /// - 待挂载的云硬盘与云主机实例必须在同一个可用区下。
        /// - 共享型云硬盘最多可挂载16个云主机实例，并且只能用作数据盘，不能用于系统盘。非共享型云盘最多只能挂载一个云主机实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AttachDiskResponse> AttachDisk(AttachDiskRequest request) {
            return await new AttachDiskExecutor().Client(this).Execute<AttachDiskResponse, AttachDiskResult, AttachDiskRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改云主机密码。
        /// 
        /// 详细操作说明请参考帮助文档：[重置密码](https://docs.jdcloud.com/cn/virtual-machines/reset-password)
        /// 
        /// ## 接口说明
        /// - 实例没有正在进行中的任务时才可操作。
        /// - 重置密码后，需要重启云主机后生效。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstancePasswordResponse ModifyInstancePassword(ModifyInstancePasswordRequest request) {
            return  new ModifyInstancePasswordExecutor().Client(this).Execute<ModifyInstancePasswordResponse, ModifyInstancePasswordResult, ModifyInstancePasswordRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改云主机密码。
        /// 
        /// 详细操作说明请参考帮助文档：[重置密码](https://docs.jdcloud.com/cn/virtual-machines/reset-password)
        /// 
        /// ## 接口说明
        /// - 实例没有正在进行中的任务时才可操作。
        /// - 重置密码后，需要重启云主机后生效。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstancePasswordResponse> ModifyInstancePassword(ModifyInstancePasswordRequest request) {
            return await new ModifyInstancePasswordExecutor().Client(this).Execute<ModifyInstancePasswordResponse, ModifyInstancePasswordResult, ModifyInstancePasswordRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机绑定弹性网卡。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/attach-eni)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以操作。
        /// - 实例中的主网卡是不可以解绑和绑定的，绑定弹性网卡只支持绑定辅助网卡。
        /// - 目标弹性网卡上如果绑定了弹性公网IP，那么其所在的可用区需要与云主机的可用区保持一致，或者弹性公网IP是全可用区类型的，才允许绑定该弹性网卡。
        /// - 弹性网卡与云主机必须在相同vpc下。
        /// - 对于受管网卡，授权中不能含有 &#x60;instance-attach&#x60; 用户才可以挂载。
        /// - 对于授信网卡，授权中必须含有 &#x60;instance-attach&#x60; 用户才可以挂载。
        /// - 实例挂载弹性网卡的数量，不能超过实例规格的限制。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得指定规格可挂载弹性网卡的数量上限。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AttachNetworkInterfaceResponse AttachNetworkInterface(AttachNetworkInterfaceRequest request) {
            return  new AttachNetworkInterfaceExecutor().Client(this).Execute<AttachNetworkInterfaceResponse, AttachNetworkInterfaceResult, AttachNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机绑定弹性网卡。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/attach-eni)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以操作。
        /// - 实例中的主网卡是不可以解绑和绑定的，绑定弹性网卡只支持绑定辅助网卡。
        /// - 目标弹性网卡上如果绑定了弹性公网IP，那么其所在的可用区需要与云主机的可用区保持一致，或者弹性公网IP是全可用区类型的，才允许绑定该弹性网卡。
        /// - 弹性网卡与云主机必须在相同vpc下。
        /// - 对于受管网卡，授权中不能含有 &#x60;instance-attach&#x60; 用户才可以挂载。
        /// - 对于授信网卡，授权中必须含有 &#x60;instance-attach&#x60; 用户才可以挂载。
        /// - 实例挂载弹性网卡的数量，不能超过实例规格的限制。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得指定规格可挂载弹性网卡的数量上限。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AttachNetworkInterfaceResponse> AttachNetworkInterface(AttachNetworkInterfaceRequest request) {
            return await new AttachNetworkInterfaceExecutor().Client(this).Execute<AttachNetworkInterfaceResponse, AttachNetworkInterfaceResult, AttachNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 删除密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[删除密钥](https://docs.jdcloud.com/cn/virtual-machines/delete-keypair)
        /// 
        /// ## 接口说明
        /// - 密钥删除后，使用该密钥的实例仍可正常使用与之匹配的本地私钥登录，且密钥仍会显示在实例详情中。
        /// - 密钥删除后，与之关联的实例模板将变为不可用，并且与该实例模板关联的高可用组也会变为不可用。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteKeypairResponse DeleteKeypair(DeleteKeypairRequest request) {
            return  new DeleteKeypairExecutor().Client(this).Execute<DeleteKeypairResponse, DeleteKeypairResult, DeleteKeypairRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 删除密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[删除密钥](https://docs.jdcloud.com/cn/virtual-machines/delete-keypair)
        /// 
        /// ## 接口说明
        /// - 密钥删除后，使用该密钥的实例仍可正常使用与之匹配的本地私钥登录，且密钥仍会显示在实例详情中。
        /// - 密钥删除后，与之关联的实例模板将变为不可用，并且与该实例模板关联的高可用组也会变为不可用。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteKeypairResponse> DeleteKeypair(DeleteKeypairRequest request) {
            return await new DeleteKeypairExecutor().Client(this).Execute<DeleteKeypairResponse, DeleteKeypairResult, DeleteKeypairRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询镜像详情。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与查询镜像信息列表返回的信息一致。
        /// - 只需要查询单个镜像信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeImageResponse DescribeImage(DescribeImageRequest request) {
            return  new DescribeImageExecutor().Client(this).Execute<DescribeImageResponse, DescribeImageResult, DescribeImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询镜像详情。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与查询镜像信息列表返回的信息一致。
        /// - 只需要查询单个镜像信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeImageResponse> DescribeImage(DescribeImageRequest request) {
            return await new DescribeImageExecutor().Client(this).Execute<DescribeImageResponse, DescribeImageResult, DescribeImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 导入密钥。
        /// 
        /// 与创建密钥不同的是，导入的密钥是由用户生成的。生成之后将公钥部分导入到京东云。
        /// 
        /// 详细操作说明请参考帮助文档：[创建密钥](https://docs.jdcloud.com/cn/virtual-machines/create-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口导入由其他工具生成的密钥对的公钥部分。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ImportKeypairResponse ImportKeypair(ImportKeypairRequest request) {
            return  new ImportKeypairExecutor().Client(this).Execute<ImportKeypairResponse, ImportKeypairResult, ImportKeypairRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 导入密钥。
        /// 
        /// 与创建密钥不同的是，导入的密钥是由用户生成的。生成之后将公钥部分导入到京东云。
        /// 
        /// 详细操作说明请参考帮助文档：[创建密钥](https://docs.jdcloud.com/cn/virtual-machines/create-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口导入由其他工具生成的密钥对的公钥部分。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ImportKeypairResponse> ImportKeypair(ImportKeypairRequest request) {
            return await new ImportKeypairExecutor().Client(this).Execute<ImportKeypairResponse, ImportKeypairResult, ImportKeypairRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 镜像跨地域复制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像复制](https://docs.jdcloud.com/cn/virtual-machines/copy-image)
        /// 
        /// ## 接口说明
        /// - 调用该接口将私有镜像复制到其它地域下。
        /// - 只支持云盘系统盘的镜像。
        /// - 不支持带有加密快照的镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CopyImagesResponse CopyImages(CopyImagesRequest request) {
            return  new CopyImagesExecutor().Client(this).Execute<CopyImagesResponse, CopyImagesResult, CopyImagesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 镜像跨地域复制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像复制](https://docs.jdcloud.com/cn/virtual-machines/copy-image)
        /// 
        /// ## 接口说明
        /// - 调用该接口将私有镜像复制到其它地域下。
        /// - 只支持云盘系统盘的镜像。
        /// - 不支持带有加密快照的镜像。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CopyImagesResponse> CopyImages(CopyImagesRequest request) {
            return await new CopyImagesExecutor().Client(this).Execute<CopyImagesResponse, CopyImagesResult, CopyImagesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询一台云主机实例的详细信息。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 该接口与查询云主机列表返回的信息一致。
        /// - 只需要查询单个云主机实例详细信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceResponse DescribeInstance(DescribeInstanceRequest request) {
            return  new DescribeInstanceExecutor().Client(this).Execute<DescribeInstanceResponse, DescribeInstanceResult, DescribeInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询一台云主机实例的详细信息。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 该接口与查询云主机列表返回的信息一致。
        /// - 只需要查询单个云主机实例详细信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceResponse> DescribeInstance(DescribeInstanceRequest request) {
            return await new DescribeInstanceExecutor().Client(this).Execute<DescribeInstanceResponse, DescribeInstanceResult, DescribeInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改云主机弹性网卡属性。
        /// 
        /// 详细操作说明请参考帮助文档：[配置弹性网卡删除属性](https://docs.jdcloud.com/cn/virtual-machines/configurate-eni-delete-attributes)
        /// 
        /// ## 接口说明
        /// - 当前只支持修改随云主机实例删除的属性。
        /// - 不支持修改主网卡。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstanceNetworkAttributeResponse ModifyInstanceNetworkAttribute(ModifyInstanceNetworkAttributeRequest request) {
            return  new ModifyInstanceNetworkAttributeExecutor().Client(this).Execute<ModifyInstanceNetworkAttributeResponse, ModifyInstanceNetworkAttributeResult, ModifyInstanceNetworkAttributeRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改云主机弹性网卡属性。
        /// 
        /// 详细操作说明请参考帮助文档：[配置弹性网卡删除属性](https://docs.jdcloud.com/cn/virtual-machines/configurate-eni-delete-attributes)
        /// 
        /// ## 接口说明
        /// - 当前只支持修改随云主机实例删除的属性。
        /// - 不支持修改主网卡。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstanceNetworkAttributeResponse> ModifyInstanceNetworkAttribute(ModifyInstanceNetworkAttributeRequest request) {
            return await new ModifyInstanceNetworkAttributeExecutor().Client(this).Execute<ModifyInstanceNetworkAttributeResponse, ModifyInstanceNetworkAttributeResult, ModifyInstanceNetworkAttributeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询资源配额。
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询 &#x60;云主机&#x60;、&#x60;镜像&#x60;、&#x60;密钥&#x60;、&#x60;实例模板&#x60;、&#x60;镜像共享&#x60; 的配额。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeQuotasResponse DescribeQuotas(DescribeQuotasRequest request) {
            return  new DescribeQuotasExecutor().Client(this).Execute<DescribeQuotasResponse, DescribeQuotasResult, DescribeQuotasRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询资源配额。
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询 &#x60;云主机&#x60;、&#x60;镜像&#x60;、&#x60;密钥&#x60;、&#x60;实例模板&#x60;、&#x60;镜像共享&#x60; 的配额。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeQuotasResponse> DescribeQuotas(DescribeQuotasRequest request) {
            return await new DescribeQuotasExecutor().Client(this).Execute<DescribeQuotasResponse, DescribeQuotasResult, DescribeQuotasRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改镜像属性。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只支持修改镜像名称或描述。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyImageAttributeResponse ModifyImageAttribute(ModifyImageAttributeRequest request) {
            return  new ModifyImageAttributeExecutor().Client(this).Execute<ModifyImageAttributeResponse, ModifyImageAttributeResult, ModifyImageAttributeRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改镜像属性。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只支持修改镜像名称或描述。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyImageAttributeResponse> ModifyImageAttribute(ModifyImageAttributeRequest request) {
            return await new ModifyImageAttributeExecutor().Client(this).Execute<ModifyImageAttributeResponse, ModifyImageAttributeResult, ModifyImageAttributeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 重启云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[重启实例](https://docs.jdcloud.com/cn/virtual-machines/reboot-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为运行 &#x60;running&#x60; 状态，同时实例没有正在进行中的任务时才可以重启。
        /// - 如果云主机实例已欠费或已到期，则无法重启。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RebootInstanceResponse RebootInstance(RebootInstanceRequest request) {
            return  new RebootInstanceExecutor().Client(this).Execute<RebootInstanceResponse, RebootInstanceResult, RebootInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 重启云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[重启实例](https://docs.jdcloud.com/cn/virtual-machines/reboot-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为运行 &#x60;running&#x60; 状态，同时实例没有正在进行中的任务时才可以重启。
        /// - 如果云主机实例已欠费或已到期，则无法重启。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RebootInstanceResponse> RebootInstance(RebootInstanceRequest request) {
            return await new RebootInstanceExecutor().Client(this).Execute<RebootInstanceResponse, RebootInstanceResult, RebootInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 批量查询密钥对。
        /// 
        /// 详细操作说明请参考帮助文档：[密钥概述](https://docs.jdcloud.com/cn/virtual-machines/keypair-overview)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条密钥数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeKeypairsResponse DescribeKeypairs(DescribeKeypairsRequest request) {
            return  new DescribeKeypairsExecutor().Client(this).Execute<DescribeKeypairsResponse, DescribeKeypairsResult, DescribeKeypairsRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 批量查询密钥对。
        /// 
        /// 详细操作说明请参考帮助文档：[密钥概述](https://docs.jdcloud.com/cn/virtual-machines/keypair-overview)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条密钥数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeKeypairsResponse> DescribeKeypairs(DescribeKeypairsRequest request) {
            return await new DescribeKeypairsExecutor().Client(this).Execute<DescribeKeypairsResponse, DescribeKeypairsResult, DescribeKeypairsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为一台云主机缷载云硬盘
        /// 
        /// 详细操作说明请参考帮助文档：[缷载云硬盘](https://docs.jdcloud.com/cn/virtual-machines/detach-cloud-disk)
        /// 
        /// ## 接口说明
        /// - 云主机和云硬盘都没有正在进行中的的任务时才可以操作。
        /// - 云主机状态必须是 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态。操作系统盘时必须先停止实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DetachDiskResponse DetachDisk(DetachDiskRequest request) {
            return  new DetachDiskExecutor().Client(this).Execute<DetachDiskResponse, DetachDiskResult, DetachDiskRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为一台云主机缷载云硬盘
        /// 
        /// 详细操作说明请参考帮助文档：[缷载云硬盘](https://docs.jdcloud.com/cn/virtual-machines/detach-cloud-disk)
        /// 
        /// ## 接口说明
        /// - 云主机和云硬盘都没有正在进行中的的任务时才可以操作。
        /// - 云主机状态必须是 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态。操作系统盘时必须先停止实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DetachDiskResponse> DetachDisk(DetachDiskRequest request) {
            return await new DetachDiskExecutor().Client(this).Execute<DetachDiskResponse, DetachDiskResult, DetachDiskRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 导入私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[导入私有镜像](https://docs.jdcloud.com/cn/virtual-machines/import-private-image)
        /// 
        /// ## 接口说明
        /// - 当前仅支持导入系统盘镜像。
        /// - 导入后的镜像将以 &#x60;云硬盘系统盘镜像&#x60; 格式作为私有镜像使用，同时会自动生成一个与导入镜像关联的快照。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ImportImageResponse ImportImage(ImportImageRequest request) {
            return  new ImportImageExecutor().Client(this).Execute<ImportImageResponse, ImportImageResult, ImportImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 导入私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[导入私有镜像](https://docs.jdcloud.com/cn/virtual-machines/import-private-image)
        /// 
        /// ## 接口说明
        /// - 当前仅支持导入系统盘镜像。
        /// - 导入后的镜像将以 &#x60;云硬盘系统盘镜像&#x60; 格式作为私有镜像使用，同时会自动生成一个与导入镜像关联的快照。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ImportImageResponse> ImportImage(ImportImageRequest request) {
            return await new ImportImageExecutor().Client(this).Execute<ImportImageResponse, ImportImageResult, ImportImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 创建实例模板。
        /// 
        /// 实例模板是创建云主机实例的配置信息模板，包括镜像、实例规格、系统盘及数据盘类型和容量、私有网络及子网配置、安全组及登录信息等。实例模板可用于创建实例及用于配置高可用组（创建高可用组时必须指定实例模板）。使用实例模板创建实例时，无需重新指定实例模板已包括的参数，缩短您的部署时间。
        /// 
        /// 请注意：实例模板一经创建后其属性将不能编辑，如需调整参数请重新创建实例模板替换使用。
        /// 
        /// 详细操作说明请参考帮助文档：[创建实例模板](https://docs.jdcloud.com/cn/virtual-machines/create-instance-template)
        /// 
        /// ## 接口说明
        /// - 创建实例模板的限制基本与创建云主机一致，可参考 [创建云主机](https://docs.jdcloud.com/cn/virtual-machines/create-instance)。
        /// - 实例模板中包含创建云主机的大部分配置参数，可以避免每次创建云主机时的重复性配置参数的工作。
        /// - 使用实例模板创建云主机时，如果再次指定了某些参数，并且与实例模板中的参数相冲突，那么新指定的参数会替换模板中的参数，以新指定的参数为准。
        /// - 使用实例模板创建云主机时，如果再次指定了镜像ID，并且与模板中的镜像ID不一致，那么模板中的 &#x60;systemDisk&#x60; 和 &#x60;dataDisks&#x60; 配置会失效，以新指定的镜像为准。
        /// - 如果使用高可用组(Ag)创建云主机，那么Ag所关联的模板中的参数都不可以被调整，只能以模板为准。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateInstanceTemplateResponse CreateInstanceTemplate(CreateInstanceTemplateRequest request) {
            return  new CreateInstanceTemplateExecutor().Client(this).Execute<CreateInstanceTemplateResponse, CreateInstanceTemplateResult, CreateInstanceTemplateRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 创建实例模板。
        /// 
        /// 实例模板是创建云主机实例的配置信息模板，包括镜像、实例规格、系统盘及数据盘类型和容量、私有网络及子网配置、安全组及登录信息等。实例模板可用于创建实例及用于配置高可用组（创建高可用组时必须指定实例模板）。使用实例模板创建实例时，无需重新指定实例模板已包括的参数，缩短您的部署时间。
        /// 
        /// 请注意：实例模板一经创建后其属性将不能编辑，如需调整参数请重新创建实例模板替换使用。
        /// 
        /// 详细操作说明请参考帮助文档：[创建实例模板](https://docs.jdcloud.com/cn/virtual-machines/create-instance-template)
        /// 
        /// ## 接口说明
        /// - 创建实例模板的限制基本与创建云主机一致，可参考 [创建云主机](https://docs.jdcloud.com/cn/virtual-machines/create-instance)。
        /// - 实例模板中包含创建云主机的大部分配置参数，可以避免每次创建云主机时的重复性配置参数的工作。
        /// - 使用实例模板创建云主机时，如果再次指定了某些参数，并且与实例模板中的参数相冲突，那么新指定的参数会替换模板中的参数，以新指定的参数为准。
        /// - 使用实例模板创建云主机时，如果再次指定了镜像ID，并且与模板中的镜像ID不一致，那么模板中的 &#x60;systemDisk&#x60; 和 &#x60;dataDisks&#x60; 配置会失效，以新指定的镜像为准。
        /// - 如果使用高可用组(Ag)创建云主机，那么Ag所关联的模板中的参数都不可以被调整，只能以模板为准。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateInstanceTemplateResponse> CreateInstanceTemplate(CreateInstanceTemplateRequest request) {
            return await new CreateInstanceTemplateExecutor().Client(this).Execute<CreateInstanceTemplateResponse, CreateInstanceTemplateResult, CreateInstanceTemplateRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机制作私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[基于实例创建私有镜像](https://docs.jdcloud.com/cn/virtual-machines/create-private-image)
        /// 
        /// ## 接口说明
        /// - 云主机实例没有正在进行中的任务时才可制作镜像。
        /// - 本地系统盘的实例，仅支持关机（已停止）状态下制作私有镜像。
        /// - 云盘系统盘的实例，支持开机(运行中)/关机（已停止）状态下制作私有镜像。
        /// - 调用接口后，需要等待镜像状态变为 &#x60;ready&#x60; 后，才能正常使用镜像。
        /// - 若当前实例系统盘为本地盘，则创建完成后的私有镜像为本地盘系统盘镜像；若当前实例系统盘为云硬盘，则创建完成后的私有镜像为云硬盘系统盘镜像。您可通过镜像类型转换 [convertImage](https://docs.jdcloud.com/Image/api/convertimage) 将本地盘系统盘镜像转换为云硬盘系统盘镜像后使用。
        /// - 默认情况下，制作的镜像中包括数据盘中的云硬盘（制作快照），但是不包含本地数据盘。
        /// - 如果需要变更打包镜像中的一些数据盘、或排除一些数据盘不需要制作快照，可通过 &#x60;dataDisks&#x60; 中的参数进行控制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateImageResponse CreateImage(CreateImageRequest request) {
            return  new CreateImageExecutor().Client(this).Execute<CreateImageResponse, CreateImageResult, CreateImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机制作私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[基于实例创建私有镜像](https://docs.jdcloud.com/cn/virtual-machines/create-private-image)
        /// 
        /// ## 接口说明
        /// - 云主机实例没有正在进行中的任务时才可制作镜像。
        /// - 本地系统盘的实例，仅支持关机（已停止）状态下制作私有镜像。
        /// - 云盘系统盘的实例，支持开机(运行中)/关机（已停止）状态下制作私有镜像。
        /// - 调用接口后，需要等待镜像状态变为 &#x60;ready&#x60; 后，才能正常使用镜像。
        /// - 若当前实例系统盘为本地盘，则创建完成后的私有镜像为本地盘系统盘镜像；若当前实例系统盘为云硬盘，则创建完成后的私有镜像为云硬盘系统盘镜像。您可通过镜像类型转换 [convertImage](https://docs.jdcloud.com/Image/api/convertimage) 将本地盘系统盘镜像转换为云硬盘系统盘镜像后使用。
        /// - 默认情况下，制作的镜像中包括数据盘中的云硬盘（制作快照），但是不包含本地数据盘。
        /// - 如果需要变更打包镜像中的一些数据盘、或排除一些数据盘不需要制作快照，可通过 &#x60;dataDisks&#x60; 中的参数进行控制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateImageResponse> CreateImage(CreateImageRequest request) {
            return await new CreateImageExecutor().Client(this).Execute<CreateImageResponse, CreateImageResult, CreateImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机绑定弹性公网IP。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定弹性公网IP](https://docs.jdcloud.com/cn/virtual-machines/associate-elastic-ip)
        /// 
        /// ## 接口说明
        /// - 该接口只支持在实例的主网卡的主内网IP上绑定弹性公网IP。
        /// - 一台云主机的主网卡的主内网IP只能绑定一个弹性公网IP，若已绑定弹性公网IP，操作绑定会返回错误。
        /// - 弹性公网IP所在的可用区需要与云主机的可用区保持一致，或者弹性公网IP是全可用区类型的，才允许绑定操作。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssociateElasticIpResponse AssociateElasticIp(AssociateElasticIpRequest request) {
            return  new AssociateElasticIpExecutor().Client(this).Execute<AssociateElasticIpResponse, AssociateElasticIpResult, AssociateElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机绑定弹性公网IP。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定弹性公网IP](https://docs.jdcloud.com/cn/virtual-machines/associate-elastic-ip)
        /// 
        /// ## 接口说明
        /// - 该接口只支持在实例的主网卡的主内网IP上绑定弹性公网IP。
        /// - 一台云主机的主网卡的主内网IP只能绑定一个弹性公网IP，若已绑定弹性公网IP，操作绑定会返回错误。
        /// - 弹性公网IP所在的可用区需要与云主机的可用区保持一致，或者弹性公网IP是全可用区类型的，才允许绑定操作。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssociateElasticIpResponse> AssociateElasticIp(AssociateElasticIpRequest request) {
            return await new AssociateElasticIpExecutor().Client(this).Execute<AssociateElasticIpResponse, AssociateElasticIpResult, AssociateElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机解绑弹性公网IP。
        /// 
        /// 详细操作说明请参考帮助文档：[解绑弹性公网IP](https://docs.jdcloud.com/cn/virtual-machines/disassociate-elastic-ip)
        /// 
        /// ## 接口说明
        /// - 该接口只支持解绑实例的主网卡的主内网IP上的弹性公网IP。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DisassociateElasticIpResponse DisassociateElasticIp(DisassociateElasticIpRequest request) {
            return  new DisassociateElasticIpExecutor().Client(this).Execute<DisassociateElasticIpResponse, DisassociateElasticIpResult, DisassociateElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机解绑弹性公网IP。
        /// 
        /// 详细操作说明请参考帮助文档：[解绑弹性公网IP](https://docs.jdcloud.com/cn/virtual-machines/disassociate-elastic-ip)
        /// 
        /// ## 接口说明
        /// - 该接口只支持解绑实例的主网卡的主内网IP上的弹性公网IP。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DisassociateElasticIpResponse> DisassociateElasticIp(DisassociateElasticIpRequest request) {
            return await new DisassociateElasticIpExecutor().Client(this).Execute<DisassociateElasticIpResponse, DisassociateElasticIpResult, DisassociateElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 停止云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[停止实例](https://docs.jdcloud.com/cn/virtual-machines/stop-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为运行 &#x60;running&#x60; 状态，同时实例没有正在进行中的任务时才可停止。
        /// - 如果云主机实例属性 &#x60;chargeOnStopped&#x60; 的值为 &#x60;stopCharging&#x60;，实例关机之后，实例部分将停止计费，且释放实例自身包含的资源（CPU/内存/GPU/本地数据盘）。需要使用者注意的是，实例一旦释放自身资源，再次启动时有可能因为库存资源不足而导致无法启动。
        /// - &#x60;chargeOnStopped&#x60; 该参数仅对按配置计费且系统盘为云硬盘的实例生效，并且不是专有宿主机中的实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public StopInstanceResponse StopInstance(StopInstanceRequest request) {
            return  new StopInstanceExecutor().Client(this).Execute<StopInstanceResponse, StopInstanceResult, StopInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 停止云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[停止实例](https://docs.jdcloud.com/cn/virtual-machines/stop-instance)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为运行 &#x60;running&#x60; 状态，同时实例没有正在进行中的任务时才可停止。
        /// - 如果云主机实例属性 &#x60;chargeOnStopped&#x60; 的值为 &#x60;stopCharging&#x60;，实例关机之后，实例部分将停止计费，且释放实例自身包含的资源（CPU/内存/GPU/本地数据盘）。需要使用者注意的是，实例一旦释放自身资源，再次启动时有可能因为库存资源不足而导致无法启动。
        /// - &#x60;chargeOnStopped&#x60; 该参数仅对按配置计费且系统盘为云硬盘的实例生效，并且不是专有宿主机中的实例。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<StopInstanceResponse> StopInstance(StopInstanceRequest request) {
            return await new StopInstanceExecutor().Client(this).Execute<StopInstanceResponse, StopInstanceResult, StopInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询实例模板详情。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与查询实例模板列表返回的信息一致。
        /// - 只需要查询单个实例模板详细信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceTemplateResponse DescribeInstanceTemplate(DescribeInstanceTemplateRequest request) {
            return  new DescribeInstanceTemplateExecutor().Client(this).Execute<DescribeInstanceTemplateResponse, DescribeInstanceTemplateResult, DescribeInstanceTemplateRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询实例模板详情。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与查询实例模板列表返回的信息一致。
        /// - 只需要查询单个实例模板详细信息的时候可以调用该接口。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceTemplateResponse> DescribeInstanceTemplate(DescribeInstanceTemplateRequest request) {
            return await new DescribeInstanceTemplateExecutor().Client(this).Execute<DescribeInstanceTemplateResponse, DescribeInstanceTemplateResult, DescribeInstanceTemplateRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询镜像信息列表。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 通过此接口可以查询到京东云官方镜像、第三方镜像、镜像市场、私有镜像、或其他用户共享给您的镜像。
        /// - 请求参数即过滤条件，每个条件之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的镜像。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条镜像信息。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeImagesResponse DescribeImages(DescribeImagesRequest request) {
            return  new DescribeImagesExecutor().Client(this).Execute<DescribeImagesResponse, DescribeImagesResult, DescribeImagesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询镜像信息列表。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 通过此接口可以查询到京东云官方镜像、第三方镜像、镜像市场、私有镜像、或其他用户共享给您的镜像。
        /// - 请求参数即过滤条件，每个条件之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的镜像。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条镜像信息。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeImagesResponse> DescribeImages(DescribeImagesRequest request) {
            return await new DescribeImagesExecutor().Client(this).Execute<DescribeImagesResponse, DescribeImagesResult, DescribeImagesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询单个镜像的实例规格限制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与批量查询镜像的实例规格限制返回的信息一致。
        /// - 通过此接口可以查询镜像的实例规格限制信息。
        /// - 只有官方镜像、第三方镜像有实例规格的限制，用户的私有镜像没有此限制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeImageConstraintsResponse DescribeImageConstraints(DescribeImageConstraintsRequest request) {
            return  new DescribeImageConstraintsExecutor().Client(this).Execute<DescribeImageConstraintsResponse, DescribeImageConstraintsResult, DescribeImageConstraintsRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询单个镜像的实例规格限制。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 该接口与批量查询镜像的实例规格限制返回的信息一致。
        /// - 通过此接口可以查询镜像的实例规格限制信息。
        /// - 只有官方镜像、第三方镜像有实例规格的限制，用户的私有镜像没有此限制。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeImageConstraintsResponse> DescribeImageConstraints(DescribeImageConstraintsRequest request) {
            return await new DescribeImageConstraintsExecutor().Client(this).Execute<DescribeImageConstraintsResponse, DescribeImageConstraintsResult, DescribeImageConstraintsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 获取云主机vnc地址。
        /// 
        /// 详细操作说明请参考帮助文档：[连接实例](https://docs.jdcloud.com/cn/virtual-machines/connect-to-instance)
        /// 
        /// ## 接口说明
        /// - 实例仅 &#x60;running&#x60; 状态时才可获取到 &#x60;vnc&#x60; 地址。
        /// - 调用该接口可获取云主机 &#x60;vnc&#x60; 地址，用于远程连接管理云主机。
        /// - &#x60;vnc&#x60; 地址的有效期为1个小时，调用接口获取vnc地址后如果1个小时内没有使用，&#x60;vnc&#x60; 地址将自动失效，再次使用需要重新获取。
        /// - 裸金属实例目前不支持通过 &#x60;vnc&#x60; 登录。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceVncUrlResponse DescribeInstanceVncUrl(DescribeInstanceVncUrlRequest request) {
            return  new DescribeInstanceVncUrlExecutor().Client(this).Execute<DescribeInstanceVncUrlResponse, DescribeInstanceVncUrlResult, DescribeInstanceVncUrlRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 获取云主机vnc地址。
        /// 
        /// 详细操作说明请参考帮助文档：[连接实例](https://docs.jdcloud.com/cn/virtual-machines/connect-to-instance)
        /// 
        /// ## 接口说明
        /// - 实例仅 &#x60;running&#x60; 状态时才可获取到 &#x60;vnc&#x60; 地址。
        /// - 调用该接口可获取云主机 &#x60;vnc&#x60; 地址，用于远程连接管理云主机。
        /// - &#x60;vnc&#x60; 地址的有效期为1个小时，调用接口获取vnc地址后如果1个小时内没有使用，&#x60;vnc&#x60; 地址将自动失效，再次使用需要重新获取。
        /// - 裸金属实例目前不支持通过 &#x60;vnc&#x60; 登录。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceVncUrlResponse> DescribeInstanceVncUrl(DescribeInstanceVncUrlRequest request) {
            return await new DescribeInstanceVncUrlExecutor().Client(this).Execute<DescribeInstanceVncUrlResponse, DescribeInstanceVncUrlResult, DescribeInstanceVncUrlRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 重置云主机系统。
        /// 
        /// 需要注意的是，重装系统会导致系统盘的内容全部丢失，数据盘的数据不受影响（但需要重新识别）。因此，在需要保留系统运行数据的情况下，强烈建议您在重置系统前制作私有镜像，之后重置时选择该私有镜像即可实现保留系统运行数据。
        /// 
        /// 详细操作说明请参考帮助文档：[重置系统](https://docs.jdcloud.com/cn/virtual-machines/rebuild-instance)
        /// 
        /// ## 接口说明
        /// - 云主机的状态必须为 &#x60;stopped&#x60; 状态。
        /// - 若实例基于私有镜像创建，而私有镜像已被删除，则无法使用原镜像重置系统，即无法恢复至刚创建时的系统状态，建议保留被实例引用的私有镜像。
        /// - 重置系统需要重新指定密码，对于 &#x60;Linux&#x60; 系统您还可以重新指定 &#x60;SSH密钥&#x60;。
        /// - 对于云盘作系统盘的实例，当前系统盘大小不能超过目标镜像对应系统盘快照的容量。
        /// - 云主机系统盘类型必须与待更换镜像支持的系统盘类型保持一致，若当前云主机系统盘为 &#x60;local&#x60; 类型，则更换镜像的系统盘类型必须为 &#x60;loaclDisk&#x60; 类型；同理，若当前云主机系统盘为 &#x60;cloud&#x60; 类型，则更换镜像的系统盘类型必须为 &#x60;cloudDisk&#x60; 类型。可查询 [DescribeImages](https://docs.jdcloud.com/virtual-machines/api/describeimages) 接口获得指定地域的镜像信息。
        /// - 指定的镜像必须能够支持当前主机的实例规格 &#x60;instanceType&#x60;，否则会返回错误。可查询 [DescribeImageConstraints](docs.jdcloud.com/virtual-machines/api/describeimageconstraints) 接口获得指定镜像支持的系统盘类型信息。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RebuildInstanceResponse RebuildInstance(RebuildInstanceRequest request) {
            return  new RebuildInstanceExecutor().Client(this).Execute<RebuildInstanceResponse, RebuildInstanceResult, RebuildInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 重置云主机系统。
        /// 
        /// 需要注意的是，重装系统会导致系统盘的内容全部丢失，数据盘的数据不受影响（但需要重新识别）。因此，在需要保留系统运行数据的情况下，强烈建议您在重置系统前制作私有镜像，之后重置时选择该私有镜像即可实现保留系统运行数据。
        /// 
        /// 详细操作说明请参考帮助文档：[重置系统](https://docs.jdcloud.com/cn/virtual-machines/rebuild-instance)
        /// 
        /// ## 接口说明
        /// - 云主机的状态必须为 &#x60;stopped&#x60; 状态。
        /// - 若实例基于私有镜像创建，而私有镜像已被删除，则无法使用原镜像重置系统，即无法恢复至刚创建时的系统状态，建议保留被实例引用的私有镜像。
        /// - 重置系统需要重新指定密码，对于 &#x60;Linux&#x60; 系统您还可以重新指定 &#x60;SSH密钥&#x60;。
        /// - 对于云盘作系统盘的实例，当前系统盘大小不能超过目标镜像对应系统盘快照的容量。
        /// - 云主机系统盘类型必须与待更换镜像支持的系统盘类型保持一致，若当前云主机系统盘为 &#x60;local&#x60; 类型，则更换镜像的系统盘类型必须为 &#x60;loaclDisk&#x60; 类型；同理，若当前云主机系统盘为 &#x60;cloud&#x60; 类型，则更换镜像的系统盘类型必须为 &#x60;cloudDisk&#x60; 类型。可查询 [DescribeImages](https://docs.jdcloud.com/virtual-machines/api/describeimages) 接口获得指定地域的镜像信息。
        /// - 指定的镜像必须能够支持当前主机的实例规格 &#x60;instanceType&#x60;，否则会返回错误。可查询 [DescribeImageConstraints](docs.jdcloud.com/virtual-machines/api/describeimageconstraints) 接口获得指定镜像支持的系统盘类型信息。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RebuildInstanceResponse> RebuildInstance(RebuildInstanceRequest request) {
            return await new RebuildInstanceExecutor().Client(this).Execute<RebuildInstanceResponse, RebuildInstanceResult, RebuildInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 发布社区镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只允许发布用户的私有镜像。
        /// - 仅支持云盘系统盘的私有镜像。
        /// - 带有加密快照的打包镜像无法发布为社区镜像。
        /// - 发布为社区镜像后会撤销共享关系。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ReleaseImageResponse ReleaseImage(ReleaseImageRequest request) {
            return  new ReleaseImageExecutor().Client(this).Execute<ReleaseImageResponse, ReleaseImageResult, ReleaseImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 发布社区镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        /// 
        /// ## 接口说明
        /// - 只允许发布用户的私有镜像。
        /// - 仅支持云盘系统盘的私有镜像。
        /// - 带有加密快照的打包镜像无法发布为社区镜像。
        /// - 发布为社区镜像后会撤销共享关系。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ReleaseImageResponse> ReleaseImage(ReleaseImageRequest request) {
            return await new ReleaseImageExecutor().Client(this).Execute<ReleaseImageResponse, ReleaseImageResult, ReleaseImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改一台云主机的属性。
        /// 
        /// 详细操作说明请参考帮助文档：
        /// [修改实例名称](https://docs.jdcloud.com/cn/virtual-machines/modify-instance-name)
        /// [自定义数据](https://docs.jdcloud.com/cn/virtual-machines/userdata)
        /// [实例元数据](https://docs.jdcloud.com/cn/virtual-machines/instance-metadata)
        /// 
        /// ## 接口说明
        /// - 支持修改实例的名称、描述、hostname、自定义数据、实例元数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstanceAttributeResponse ModifyInstanceAttribute(ModifyInstanceAttributeRequest request) {
            return  new ModifyInstanceAttributeExecutor().Client(this).Execute<ModifyInstanceAttributeResponse, ModifyInstanceAttributeResult, ModifyInstanceAttributeRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改一台云主机的属性。
        /// 
        /// 详细操作说明请参考帮助文档：
        /// [修改实例名称](https://docs.jdcloud.com/cn/virtual-machines/modify-instance-name)
        /// [自定义数据](https://docs.jdcloud.com/cn/virtual-machines/userdata)
        /// [实例元数据](https://docs.jdcloud.com/cn/virtual-machines/instance-metadata)
        /// 
        /// ## 接口说明
        /// - 支持修改实例的名称、描述、hostname、自定义数据、实例元数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstanceAttributeResponse> ModifyInstanceAttribute(ModifyInstanceAttributeRequest request) {
            return await new ModifyInstanceAttributeExecutor().Client(this).Execute<ModifyInstanceAttributeResponse, ModifyInstanceAttributeResult, ModifyInstanceAttributeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 变更云主机实例配置。
        /// 
        /// 详细操作说明请参考帮助文档：[调整配置](https://docs.jdcloud.com/cn/virtual-machines/resize-instance)
        /// 
        /// ## 接口说明
        ///   - 云主机的状态必须为 &#x60;stopped&#x60; 状态。
        ///   - 16年创建的云硬盘做系统盘的云主机，实例规格不允许跨代调配。
        ///   - 若当前实例系统盘为本地盘，则不允许跨代调配，例如第一代云主机不允许与第二代云主机互相调配，且不允许调整至第一代存储优化大数据型 &#x60;s.d1&#x60; 及第二代存储优化大数据型 &#x60;s.d2&#x60;。
        ///   - 若当前实例在高可用组内，则不允许调配至除GPU类型外的第一代云主机，受限于高可用组支持的规格情况。
        ///   - 若当前实例已挂载加密云盘，则不允许调配至第一代云主机，受限于支持加密盘的规格情况。
        ///   - 裸金属实例规格主机暂不支持调配，即不支持从其他规格调整为裸金属规格或从裸金属规格调整为其他规格。
        ///   - 对于按配置计费实例，调整配置后将按照新规格计费，调整前规格会立即出账结算（即对上次整点结算时间至当前时间产生的费用进行结算）。
        ///   - 若当前实例带有本地数据盘，需清除本地盘内数据才可调整配置，还请谨慎操作。
        ///   - 对于包年包月计费云主机：
        /// 	- 若调配后规格价格低于调配前规格价格，则将延长云主机到期时间；
        /// 	- 若调配后规格价格高于调配前规格价格，需要支付到期前的差价。
        ///   - 如果当前主机中的弹性网卡数量，超过了目标实例规格允许的弹性网卡数量，会返回错误。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得实例规格允许的弹性网卡数量。
        ///   - 如果当前主机中的云硬盘数据，超过了目标实例规格允许的云硬盘数量，会返回错误。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得实例规格允许的云硬盘数量。
        ///   - 当前主机所使用的镜像，需要支持目标实例规格，否则返回错误。可查询 [DescribeImageConstraints](docs.jdcloud.com/virtual-machines/api/describeimageconstraints) 接口获得指定镜像的实例规格限制信息。
        ///   - 云主机欠费或到期时，无法更改实例规格。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ResizeInstanceResponse ResizeInstance(ResizeInstanceRequest request) {
            return  new ResizeInstanceExecutor().Client(this).Execute<ResizeInstanceResponse, ResizeInstanceResult, ResizeInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 变更云主机实例配置。
        /// 
        /// 详细操作说明请参考帮助文档：[调整配置](https://docs.jdcloud.com/cn/virtual-machines/resize-instance)
        /// 
        /// ## 接口说明
        ///   - 云主机的状态必须为 &#x60;stopped&#x60; 状态。
        ///   - 16年创建的云硬盘做系统盘的云主机，实例规格不允许跨代调配。
        ///   - 若当前实例系统盘为本地盘，则不允许跨代调配，例如第一代云主机不允许与第二代云主机互相调配，且不允许调整至第一代存储优化大数据型 &#x60;s.d1&#x60; 及第二代存储优化大数据型 &#x60;s.d2&#x60;。
        ///   - 若当前实例在高可用组内，则不允许调配至除GPU类型外的第一代云主机，受限于高可用组支持的规格情况。
        ///   - 若当前实例已挂载加密云盘，则不允许调配至第一代云主机，受限于支持加密盘的规格情况。
        ///   - 裸金属实例规格主机暂不支持调配，即不支持从其他规格调整为裸金属规格或从裸金属规格调整为其他规格。
        ///   - 对于按配置计费实例，调整配置后将按照新规格计费，调整前规格会立即出账结算（即对上次整点结算时间至当前时间产生的费用进行结算）。
        ///   - 若当前实例带有本地数据盘，需清除本地盘内数据才可调整配置，还请谨慎操作。
        ///   - 对于包年包月计费云主机：
        /// 	- 若调配后规格价格低于调配前规格价格，则将延长云主机到期时间；
        /// 	- 若调配后规格价格高于调配前规格价格，需要支付到期前的差价。
        ///   - 如果当前主机中的弹性网卡数量，超过了目标实例规格允许的弹性网卡数量，会返回错误。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得实例规格允许的弹性网卡数量。
        ///   - 如果当前主机中的云硬盘数据，超过了目标实例规格允许的云硬盘数量，会返回错误。可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得实例规格允许的云硬盘数量。
        ///   - 当前主机所使用的镜像，需要支持目标实例规格，否则返回错误。可查询 [DescribeImageConstraints](docs.jdcloud.com/virtual-machines/api/describeimageconstraints) 接口获得指定镜像的实例规格限制信息。
        ///   - 云主机欠费或到期时，无法更改实例规格。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ResizeInstanceResponse> ResizeInstance(ResizeInstanceRequest request) {
            return await new ResizeInstanceExecutor().Client(this).Execute<ResizeInstanceResponse, ResizeInstanceResult, ResizeInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 删除一个私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[删除私有镜像](https://docs.jdcloud.com/cn/virtual-machines/delete-private-image)
        /// 
        /// ## 接口说明
        /// - 已共享的私有镜像在取消共享关系前不可以删除，如私有镜像已共享给其他用户，请取消共享后再进行删除。
        /// - 本地系统盘镜像在有基于其创建的云主机时，将无法删除。
        /// - 只能操作私有镜像。
        /// - 私有镜像没有正在处理中的任务时才可以删除。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteImageResponse DeleteImage(DeleteImageRequest request) {
            return  new DeleteImageExecutor().Client(this).Execute<DeleteImageResponse, DeleteImageResult, DeleteImageRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 删除一个私有镜像。
        /// 
        /// 详细操作说明请参考帮助文档：[删除私有镜像](https://docs.jdcloud.com/cn/virtual-machines/delete-private-image)
        /// 
        /// ## 接口说明
        /// - 已共享的私有镜像在取消共享关系前不可以删除，如私有镜像已共享给其他用户，请取消共享后再进行删除。
        /// - 本地系统盘镜像在有基于其创建的云主机时，将无法删除。
        /// - 只能操作私有镜像。
        /// - 私有镜像没有正在处理中的任务时才可以删除。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteImageResponse> DeleteImage(DeleteImageRequest request) {
            return await new DeleteImageExecutor().Client(this).Execute<DeleteImageResponse, DeleteImageResult, DeleteImageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询实例规格列表。
        /// 
        /// 详细操作说明请参考帮助文档：[实例规格类型](https://docs.jdcloud.com/cn/virtual-machines/instance-type-family)
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询全量实例规格信息。
        /// - 可查询实例规格的CPU、内存大小、可绑定的弹性网卡数量、可挂载的云硬盘数量，是否售卖等信息。
        /// - GPU 或 本地存储型的规格可查询 GPU型号、GPU卡数量、本地盘数量。
        /// - 尽量使用过滤器查询关心的实例规格，并适当缓存这些信息。否则全量查询可能响应较慢。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceTypesResponse DescribeInstanceTypes(DescribeInstanceTypesRequest request) {
            return  new DescribeInstanceTypesExecutor().Client(this).Execute<DescribeInstanceTypesResponse, DescribeInstanceTypesResult, DescribeInstanceTypesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询实例规格列表。
        /// 
        /// 详细操作说明请参考帮助文档：[实例规格类型](https://docs.jdcloud.com/cn/virtual-machines/instance-type-family)
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询全量实例规格信息。
        /// - 可查询实例规格的CPU、内存大小、可绑定的弹性网卡数量、可挂载的云硬盘数量，是否售卖等信息。
        /// - GPU 或 本地存储型的规格可查询 GPU型号、GPU卡数量、本地盘数量。
        /// - 尽量使用过滤器查询关心的实例规格，并适当缓存这些信息。否则全量查询可能响应较慢。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceTypesResponse> DescribeInstanceTypes(DescribeInstanceTypesRequest request) {
            return await new DescribeInstanceTypesExecutor().Client(this).Execute<DescribeInstanceTypesResponse, DescribeInstanceTypesResult, DescribeInstanceTypesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机解绑弹性网卡。
        /// 
        /// 详细操作说明请参考帮助文档：[解绑弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/detach-eni)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以操作。
        /// - 实例中的主网卡是不可以解绑和绑定的，解绑弹性网卡只支持解绑辅助网卡。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DetachNetworkInterfaceResponse DetachNetworkInterface(DetachNetworkInterfaceRequest request) {
            return  new DetachNetworkInterfaceExecutor().Client(this).Execute<DetachNetworkInterfaceResponse, DetachNetworkInterfaceResult, DetachNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机解绑弹性网卡。
        /// 
        /// 详细操作说明请参考帮助文档：[解绑弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/detach-eni)
        /// 
        /// ## 接口说明
        /// - 实例状态必须为 &#x60;running&#x60; 或 &#x60;stopped&#x60; 状态，同时实例没有正在进行中的任务时才可以操作。
        /// - 实例中的主网卡是不可以解绑和绑定的，解绑弹性网卡只支持解绑辅助网卡。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DetachNetworkInterfaceResponse> DetachNetworkInterface(DetachNetworkInterfaceRequest request) {
            return await new DetachNetworkInterfaceExecutor().Client(this).Execute<DetachNetworkInterfaceResponse, DetachNetworkInterfaceResult, DetachNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 删除单个实例模板。
        /// 
        /// 详细操作说明请参考帮助文档：[删除实例模板](https://docs.jdcloud.com/cn/virtual-machines/delete-instance-template)
        /// 
        /// ## 接口说明
        /// - 关联了高可用组的实例模板不可以删除。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteInstanceTemplateResponse DeleteInstanceTemplate(DeleteInstanceTemplateRequest request) {
            return  new DeleteInstanceTemplateExecutor().Client(this).Execute<DeleteInstanceTemplateResponse, DeleteInstanceTemplateResult, DeleteInstanceTemplateRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 删除单个实例模板。
        /// 
        /// 详细操作说明请参考帮助文档：[删除实例模板](https://docs.jdcloud.com/cn/virtual-machines/delete-instance-template)
        /// 
        /// ## 接口说明
        /// - 关联了高可用组的实例模板不可以删除。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteInstanceTemplateResponse> DeleteInstanceTemplate(DeleteInstanceTemplateRequest request) {
            return await new DeleteInstanceTemplateExecutor().Client(this).Execute<DeleteInstanceTemplateResponse, DeleteInstanceTemplateResult, DeleteInstanceTemplateRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询实例模板列表。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条实例模板数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceTemplatesResponse DescribeInstanceTemplates(DescribeInstanceTemplatesRequest request) {
            return  new DescribeInstanceTemplatesExecutor().Client(this).Execute<DescribeInstanceTemplatesResponse, DescribeInstanceTemplatesResult, DescribeInstanceTemplatesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询实例模板列表。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条实例模板数据。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceTemplatesResponse> DescribeInstanceTemplates(DescribeInstanceTemplatesRequest request) {
            return await new DescribeInstanceTemplatesExecutor().Client(this).Execute<DescribeInstanceTemplatesResponse, DescribeInstanceTemplatesResult, DescribeInstanceTemplatesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改一台云主机中的云硬盘属性。
        /// 
        /// 详细操作说明请参考帮助文档：[配置云硬盘删除属性](https://docs.jdcloud.com/cn/virtual-machines/configurate-delete-attributes)
        /// 
        /// ## 接口说明
        /// - 该接口当前只能修改实例中的云硬盘随实例删除属性。
        /// - 仅按配置计费、并且非共享型的云硬盘支持修改。
        /// - 包年包月计费的云硬盘该属性不生效，实例删除时云硬盘将保留。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstanceDiskAttributeResponse ModifyInstanceDiskAttribute(ModifyInstanceDiskAttributeRequest request) {
            return  new ModifyInstanceDiskAttributeExecutor().Client(this).Execute<ModifyInstanceDiskAttributeResponse, ModifyInstanceDiskAttributeResult, ModifyInstanceDiskAttributeRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改一台云主机中的云硬盘属性。
        /// 
        /// 详细操作说明请参考帮助文档：[配置云硬盘删除属性](https://docs.jdcloud.com/cn/virtual-machines/configurate-delete-attributes)
        /// 
        /// ## 接口说明
        /// - 该接口当前只能修改实例中的云硬盘随实例删除属性。
        /// - 仅按配置计费、并且非共享型的云硬盘支持修改。
        /// - 包年包月计费的云硬盘该属性不生效，实例删除时云硬盘将保留。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstanceDiskAttributeResponse> ModifyInstanceDiskAttribute(ModifyInstanceDiskAttributeRequest request) {
            return await new ModifyInstanceDiskAttributeExecutor().Client(this).Execute<ModifyInstanceDiskAttributeResponse, ModifyInstanceDiskAttributeResult, ModifyInstanceDiskAttributeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的主网卡内网主IP地址。
        /// 
        /// 弹性网卡说明请参考帮助文档：[弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/attach-eni)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstancePrivateIpAddressResponse DescribeInstancePrivateIpAddress(DescribeInstancePrivateIpAddressRequest request) {
            return  new DescribeInstancePrivateIpAddressExecutor().Client(this).Execute<DescribeInstancePrivateIpAddressResponse, DescribeInstancePrivateIpAddressResult, DescribeInstancePrivateIpAddressRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的主网卡内网主IP地址。
        /// 
        /// 弹性网卡说明请参考帮助文档：[弹性网卡](https://docs.jdcloud.com/cn/virtual-machines/attach-eni)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstancePrivateIpAddressResponse> DescribeInstancePrivateIpAddress(DescribeInstancePrivateIpAddressRequest request) {
            return await new DescribeInstancePrivateIpAddressExecutor().Client(this).Execute<DescribeInstancePrivateIpAddressResponse, DescribeInstancePrivateIpAddressResult, DescribeInstancePrivateIpAddressRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询镜像任务详情。
        /// 
        /// 将京东云私有镜像导出至京东云以外环境。
        /// 
        /// 详细操作说明请参考帮助文档：
        /// [导入私有镜像](https://docs.jdcloud.com/cn/virtual-machines/import-private-image)
        /// [导出私有镜像](https://docs.jdcloud.com/cn/virtual-machines/export-private-image)
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询镜像导入或导出的任务详情。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ImageTasksResponse ImageTasks(ImageTasksRequest request) {
            return  new ImageTasksExecutor().Client(this).Execute<ImageTasksResponse, ImageTasksResult, ImageTasksRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询镜像任务详情。
        /// 
        /// 将京东云私有镜像导出至京东云以外环境。
        /// 
        /// 详细操作说明请参考帮助文档：
        /// [导入私有镜像](https://docs.jdcloud.com/cn/virtual-machines/import-private-image)
        /// [导出私有镜像](https://docs.jdcloud.com/cn/virtual-machines/export-private-image)
        /// 
        /// ## 接口说明
        /// - 调用该接口可查询镜像导入或导出的任务详情。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ImageTasksResponse> ImageTasks(ImageTasksRequest request) {
            return await new ImageTasksExecutor().Client(this).Execute<ImageTasksResponse, ImageTasksResult, ImageTasksRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的状态。
        /// 
        /// 云主机实例的状态说明请参考帮助文档：[云主机状态](https://docs.jdcloud.com/cn/virtual-machines/api/vm_status)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条云主机状态。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceStatusResponse DescribeInstanceStatus(DescribeInstanceStatusRequest request) {
            return  new DescribeInstanceStatusExecutor().Client(this).Execute<DescribeInstanceStatusResponse, DescribeInstanceStatusResult, DescribeInstanceStatusRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的状态。
        /// 
        /// 云主机实例的状态说明请参考帮助文档：[云主机状态](https://docs.jdcloud.com/cn/virtual-machines/api/vm_status)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 单次查询最大可查询100条云主机状态。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceStatusResponse> DescribeInstanceStatus(DescribeInstanceStatusRequest request) {
            return await new DescribeInstanceStatusExecutor().Client(this).Execute<DescribeInstanceStatusResponse, DescribeInstanceStatusResult, DescribeInstanceStatusRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 为云主机实例解绑密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定密钥](https://docs.jdcloud.com/cn/virtual-machines/bind-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口解绑云主机实例中的密钥。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DetachKeypairResponse DetachKeypair(DetachKeypairRequest request) {
            return  new DetachKeypairExecutor().Client(this).Execute<DetachKeypairResponse, DetachKeypairResult, DetachKeypairRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 为云主机实例解绑密钥。
        /// 
        /// 详细操作说明请参考帮助文档：[绑定密钥](https://docs.jdcloud.com/cn/virtual-machines/bind-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口解绑云主机实例中的密钥。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DetachKeypairResponse> DetachKeypair(DetachKeypairRequest request) {
            return await new DetachKeypairExecutor().Client(this).Execute<DetachKeypairResponse, DetachKeypairResult, DetachKeypairRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 删除一台云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[删除实例](https://docs.jdcloud.com/cn/virtual-machines/delete-instance)
        /// 
        /// ## 接口说明
        /// - 不可以删除包年包月未到期的云主机。如果云主机为包年包月已到期的，并且用户处于白名单中，也不允许删除。
        /// - 不可以删除没有计费信息的云主机，该情况只限于创建过程中出现了异常。
        /// - 云主机状态必须为运行 &#x60;running&#x60;、停止 &#x60;stopped&#x60;、错误 &#x60;error&#x60;、状态，同时云主机没有正在进行中的任务才可以删除。
        /// - 如果云主机中挂载的数据盘为按配置计费的云硬盘且 &#x60;AutoDelete&#x60; 属性为 &#x60;true&#x60;，那么数据盘会随云主机一起删除。
        /// - 云主机中绑定的弹性公网IP不会随云主机一起删除，如果不需要保留，需要单独进行删除，需要使用者注意。
        /// - 如出现不能删除的情况请 [提交工单](https://ticket.jdcloud.com/applyorder/submit) 或联系京东云客服。
        ///  [MFA enabled]
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteInstanceResponse DeleteInstance(DeleteInstanceRequest request) {
            return  new DeleteInstanceExecutor().Client(this).Execute<DeleteInstanceResponse, DeleteInstanceResult, DeleteInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 删除一台云主机实例。
        /// 
        /// 详细操作说明请参考帮助文档：[删除实例](https://docs.jdcloud.com/cn/virtual-machines/delete-instance)
        /// 
        /// ## 接口说明
        /// - 不可以删除包年包月未到期的云主机。如果云主机为包年包月已到期的，并且用户处于白名单中，也不允许删除。
        /// - 不可以删除没有计费信息的云主机，该情况只限于创建过程中出现了异常。
        /// - 云主机状态必须为运行 &#x60;running&#x60;、停止 &#x60;stopped&#x60;、错误 &#x60;error&#x60;、状态，同时云主机没有正在进行中的任务才可以删除。
        /// - 如果云主机中挂载的数据盘为按配置计费的云硬盘且 &#x60;AutoDelete&#x60; 属性为 &#x60;true&#x60;，那么数据盘会随云主机一起删除。
        /// - 云主机中绑定的弹性公网IP不会随云主机一起删除，如果不需要保留，需要单独进行删除，需要使用者注意。
        /// - 如出现不能删除的情况请 [提交工单](https://ticket.jdcloud.com/applyorder/submit) 或联系京东云客服。
        ///  [MFA enabled]
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteInstanceResponse> DeleteInstance(DeleteInstanceRequest request) {
            return await new DeleteInstanceExecutor().Client(this).Execute<DeleteInstanceResponse, DeleteInstanceResult, DeleteInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 修改一台云主机的子网或内网IP地址。
        /// 
        /// 详细操作说明请参考帮助文档：[修改网络配置](https://docs.jdcloud.com/cn/virtual-machines/modify-vpc-attribute)
        /// 
        /// ## 接口说明
        /// - 调该接口之前实例必须处于停止 &#x60;stopped&#x60; 状态。
        /// - 修改VPC及子网
        ///   - 内网IPv4：可指定或由系统分配。
        ///   - IPv6：如新子网支持IPv6，可选是否分配，如分配仅支持系统分配。
        ///   - 安全组：须指定新VPC下的安全组。
        /// - 不修改VPC，仅修改子网
        ///   - 内网IPv4：可指定或由系统分配。
        ///   - IPv6：如新子网支持IPv6，可选是否分配，如分配仅支持系统分配。
        ///   - 安全组：不支持绑定新安全组。
        /// - 不修改VPC及子网，仅更换内网IP
        ///   - 内网IPv4：须指定IP地址。
        ///   - IPv6：不支持修改。
        ///   - 安全组：不支持绑定新安全组。
        /// - 一些限制及注意事项：
        ///   - 已加入负载均衡-后端服务器组中的实例不允许修改。
        ///   - 绑定弹性网卡的实例不支持修改VPC，仅支持在同VPC下修改子网和内网IP。
        ///   - 主网卡分配了辅助内网IP的实例不支持修改VPC和子网，仅支持在同子网下修改内网IP。
        ///   - 如实例在高可用组内，则不允许修改VPC，仅可在同VPC内修改子网或内网IPv4地址。
        ///   - 仅在更换VPC时传入安全组ID才有效，且安全组须隶属于目标VPC。
        ///   - 如指定内网IPv4，须确保IP地址在子网网段内且未被占用；如不指定则随机分配，须确保子网可用IP充足。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyInstanceVpcAttributeResponse ModifyInstanceVpcAttribute(ModifyInstanceVpcAttributeRequest request) {
            return  new ModifyInstanceVpcAttributeExecutor().Client(this).Execute<ModifyInstanceVpcAttributeResponse, ModifyInstanceVpcAttributeResult, ModifyInstanceVpcAttributeRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 修改一台云主机的子网或内网IP地址。
        /// 
        /// 详细操作说明请参考帮助文档：[修改网络配置](https://docs.jdcloud.com/cn/virtual-machines/modify-vpc-attribute)
        /// 
        /// ## 接口说明
        /// - 调该接口之前实例必须处于停止 &#x60;stopped&#x60; 状态。
        /// - 修改VPC及子网
        ///   - 内网IPv4：可指定或由系统分配。
        ///   - IPv6：如新子网支持IPv6，可选是否分配，如分配仅支持系统分配。
        ///   - 安全组：须指定新VPC下的安全组。
        /// - 不修改VPC，仅修改子网
        ///   - 内网IPv4：可指定或由系统分配。
        ///   - IPv6：如新子网支持IPv6，可选是否分配，如分配仅支持系统分配。
        ///   - 安全组：不支持绑定新安全组。
        /// - 不修改VPC及子网，仅更换内网IP
        ///   - 内网IPv4：须指定IP地址。
        ///   - IPv6：不支持修改。
        ///   - 安全组：不支持绑定新安全组。
        /// - 一些限制及注意事项：
        ///   - 已加入负载均衡-后端服务器组中的实例不允许修改。
        ///   - 绑定弹性网卡的实例不支持修改VPC，仅支持在同VPC下修改子网和内网IP。
        ///   - 主网卡分配了辅助内网IP的实例不支持修改VPC和子网，仅支持在同子网下修改内网IP。
        ///   - 如实例在高可用组内，则不允许修改VPC，仅可在同VPC内修改子网或内网IPv4地址。
        ///   - 仅在更换VPC时传入安全组ID才有效，且安全组须隶属于目标VPC。
        ///   - 如指定内网IPv4，须确保IP地址在子网网段内且未被占用；如不指定则随机分配，须确保子网可用IP充足。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyInstanceVpcAttributeResponse> ModifyInstanceVpcAttribute(ModifyInstanceVpcAttributeRequest request) {
            return await new ModifyInstanceVpcAttributeExecutor().Client(this).Execute<ModifyInstanceVpcAttributeResponse, ModifyInstanceVpcAttributeResult, ModifyInstanceVpcAttributeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的详细信息。该接口为轻量级接口，不返回云盘、网络、计费、标签等关联信息。如果不需要关联资源属性，尽量选择使用该接口。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的云主机实例。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeBriefInstancesResponse DescribeBriefInstances(DescribeBriefInstancesRequest request) {
            return  new DescribeBriefInstancesExecutor().Client(this).Execute<DescribeBriefInstancesResponse, DescribeBriefInstancesResult, DescribeBriefInstancesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的详细信息。该接口为轻量级接口，不返回云盘、网络、计费、标签等关联信息。如果不需要关联资源属性，尽量选择使用该接口。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的云主机实例。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeBriefInstancesResponse> DescribeBriefInstances(DescribeBriefInstancesRequest request) {
            return await new DescribeBriefInstancesExecutor().Client(this).Execute<DescribeBriefInstancesResponse, DescribeBriefInstancesResult, DescribeBriefInstancesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的详细信息。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的云主机实例。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request) {
            return  new DescribeInstancesExecutor().Client(this).Execute<DescribeInstancesResponse, DescribeInstancesResult, DescribeInstancesRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 查询一台或多台云主机实例的详细信息。
        /// 
        /// 详细操作说明请参考帮助文档：[查找实例](https://docs.jdcloud.com/cn/virtual-machines/search-instance)
        /// 
        /// ## 接口说明
        /// - 使用 &#x60;filters&#x60; 过滤器进行条件筛选，每个 &#x60;filter&#x60; 之间的关系为逻辑与（AND）的关系。
        /// - 如果使用子帐号查询，只会查询到该子帐号有权限的云主机实例。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        /// - 单次查询最大可查询100条云主机实例数据。
        /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstancesResponse> DescribeInstances(DescribeInstancesRequest request) {
            return await new DescribeInstancesExecutor().Client(this).Execute<DescribeInstancesResponse, DescribeInstancesResult, DescribeInstancesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 创建密钥。
        /// 
        /// 公钥和私钥都由京东云生成，公钥保存在京东云，私钥返回给用户，由用户保存。
        /// 
        /// 详细操作说明请参考帮助文档：[创建密钥](https://docs.jdcloud.com/cn/virtual-machines/create-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口创建密钥后，公钥部分存储在京东云，并返回未加密的 &#x60;PEM&#x60; 编码的 &#x60;PKCS#8&#x60; 格式私钥，您只有一次机会保存您的私钥。请妥善保管。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateKeypairResponse CreateKeypair(CreateKeypairRequest request) {
            return  new CreateKeypairExecutor().Client(this).Execute<CreateKeypairResponse, CreateKeypairResult, CreateKeypairRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 创建密钥。
        /// 
        /// 公钥和私钥都由京东云生成，公钥保存在京东云，私钥返回给用户，由用户保存。
        /// 
        /// 详细操作说明请参考帮助文档：[创建密钥](https://docs.jdcloud.com/cn/virtual-machines/create-keypair)
        /// 
        /// ## 接口说明
        /// - 调用该接口创建密钥后，公钥部分存储在京东云，并返回未加密的 &#x60;PEM&#x60; 编码的 &#x60;PKCS#8&#x60; 格式私钥，您只有一次机会保存您的私钥。请妥善保管。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateKeypairResponse> CreateKeypair(CreateKeypairRequest request) {
            return await new CreateKeypairExecutor().Client(this).Execute<CreateKeypairResponse, CreateKeypairResult, CreateKeypairRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  
        /// 校验实例模板的有效性。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 调用该接口可以校验实例模板是否有效，例如某些关联资源可能已经被删除了，此刻实例模板可能已经失效了。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public VerifyInstanceTemplateResponse VerifyInstanceTemplate(VerifyInstanceTemplateRequest request) {
            return  new VerifyInstanceTemplateExecutor().Client(this).Execute<VerifyInstanceTemplateResponse, VerifyInstanceTemplateResult, VerifyInstanceTemplateRequest>(request);
        }
#else
        /// <summary>
        ///  
        /// 校验实例模板的有效性。
        /// 
        /// 详细操作说明请参考帮助文档：[实例模板](https://docs.jdcloud.com/cn/virtual-machines/instance-template-overview)
        /// 
        /// ## 接口说明
        /// - 调用该接口可以校验实例模板是否有效，例如某些关联资源可能已经被删除了，此刻实例模板可能已经失效了。
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<VerifyInstanceTemplateResponse> VerifyInstanceTemplate(VerifyInstanceTemplateRequest request) {
            return await new VerifyInstanceTemplateExecutor().Client(this).Execute<VerifyInstanceTemplateResponse, VerifyInstanceTemplateResult, VerifyInstanceTemplateRequest>(request).ConfigureAwait(false);
        }
#endif

            /// <summary>
            ///  默认VmClient 构造器 接口
            ///</summary>
            public interface Builder
            {

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>vmClient 构造器</returns>
                Builder CredentialsProvider(CredentialsProvider provider);

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>vmClient 构造器</returns>
                Builder Environment(Core.Client.SDKEnvironment environment);

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>vmClient 构造器</returns>
                Builder HttpRequestConfig(HttpRequestConfig config);

                /// <summary>
                ///  构造VmClient 对象
                ///</summary>
                VmClient Build();
            }

            /// <summary>
            ///  默认VmClient 构造器
            ///</summary>
            public class DefaultBuilder : Builder
            {
                /// <summary>
                ///  VmClient service client
                /// </summary>
                private  VmClient vmClient;

                /// <summary>
                ///  默认VmClient 构造器构造对象
                ///</summary>
                public DefaultBuilder()
                {
                    vmClient = new VmClient();
                }

                /// <summary>
                ///  构造VmClient 对象
                ///</summary>
                public VmClient Build()
                {
                    if (vmClient.CredentialsProvider == null)
                    {
                        //if credentialsProvider not set, try load jdcloud global default  credentials provider
                        vmClient.credentialsProvider = JdCloud.DefaultInstance.GetCredentialsProvider();
                        if (vmClient.credentialsProvider == null)
                        {
                            throw new ArgumentNullException("VmClient build error: jdcloud credentials provider not set");
                        }
                    }
                    if (vmClient.HttpRequestConfig == null)
                    {
                        vmClient.httpRequestConfig = JdCloud.DefaultInstance.GetHttpRequestConfig();
                        if (vmClient.httpRequestConfig == null)
                        {
                        throw new ArgumentNullException("VmClient build error: http request config not set");
                        }
                    }
                    return vmClient;
                }

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>vmClient 构造器</returns>
                public Builder CredentialsProvider(CredentialsProvider provider)
                {
                    vmClient.credentialsProvider = provider;
                    return this;
                }

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>vmClient 构造器</returns>
                public Builder Environment(SDKEnvironment environment)
                {
                    vmClient.environment = environment;
                    return this;
                }

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>vmClient 构造器</returns>
                public Builder HttpRequestConfig(HttpRequestConfig config)
                {
                    vmClient.httpRequestConfig = config;
                    return this;
                }
            }
    }
}
